package dao;

import java.lang.reflect.Method;

public class demo09 {
    public static void main(String[] args) {
        try{
            //通过发射加载Person类
            Class clz=Class.forName("dao.Person");

            //没有参数可以不写或用null表示
            Method getAge=clz.getDeclaredMethod("getAge",null);
            //getAge方法并传参，没有参数可以不写或用null表示
            //getAge方法静态方法，调用时可以不指定具体Person实例
            getAge.setAccessible(true);
            Object returnAge=getAge.invoke(null,null);
            System.out.println("年龄是："+returnAge);

            Object person=clz.newInstance();

            //没有参数可以不写或用null表示
            Method silentMethod=clz.getDeclaredMethod("silentMethod",null);
            silentMethod.setAccessible(true);
            //调用silentMethod方法并传参，没有参数可以不写或用null表示
            silentMethod.invoke(person,null);
            //根据方法名和参数列表获取public void setName(String)方法
            Method setName=clz.getDeclaredMethod("setName",String.class);
            //调用setName方法并传参
            setName.invoke(person,"New Person");
            Object returnName=clz.getDeclaredMethod("getName").invoke(person);
            System.out.println("刚才设定的name是："+returnName);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
